构造最优二叉查找树的时间复杂度分析

概念


      二叉查找树(BST,Binary Search Tree),又名二叉搜索树或二叉检索树,是一颗满足如下条件的树:
      1、每个节点包含一个键值
      2、每个节点有最多两个孩子
      3、对于任意两个节点x和y,它们满足下述搜索性质:
            a、如果y在x的左子树里,则key[y] <= key[x]
            b、如果y在x的右子树里,则key[y] >= key[x]


      最优二叉查找树(Optimal BST,Optimal Binary Search Tree)
      最优二叉查找树是使查找各节点平均代价最低的二叉查找树。具体来说就是:给定键值序列 K = <k1, k2, . . . , kn>,k1 < k2 <· · · < kn,其中键值ki,被查找的概率为pi,要求以这些键值构建一颗二叉查找树T,使得查找的期望代价最低(查找代价为检查的节点数)。
      下面是对于查找期望代价的解释:
      对于键值ki, 如果其在构造的二叉查找树里的深度(离开树根的分支数)为depthT(ki),则搜索该键值的代价= depthT(ki) +1(需要加上深度为0的树根节点)。由于每个键值被查找的概率分别为pi,i=1,2,3…,n。所以查找期望代价为: 
      E[T的查找代价] = ∑i=1~n(depthT(ki) +1) · pi

 

 

 

时间复杂度

 

 

      1、穷举
      穷举构造最优二叉查找树,其实就是这样的一个问题:
      给一个拥有n个数的已排序的节点,可以将其构造成多少种不同的BST(用来找到一个最优的二叉查找树)?
      设可以构造成T(n)个,那么枚举每一个元素作为根节点的情况,当第一个元素作为根节点时,其余n-1个构成右子树,无左子树,是n-1情况时的子问题,共T(n-1)种;当第二个元素作为根节点时,左子树有1个元素,右子树有n-2个元素,根据

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
二叉搜索时间复杂度取决于的平衡性。如果二叉搜索是平衡的,即左右子的高度差不超过1,那么它的时间复杂度为O(log n),近似于折半查找。这是因为在平衡中,每次比较可以将搜索范围减小一半,使得搜索效率相对较高。引用给出的公式表示了平衡二叉搜索的高度与节点个数之间的关系。 然而,如果二叉搜索不平衡,即左右子的高度差很大,其深度可以达到n,此时的时间复杂度为O(n),相当于顺序查找。这种情况下,搜索效率会非常低。引用和都提到了这种情况下的时间复杂度。 因此,为了获得较好的查找性能,我们需要构造一棵平衡的二叉搜索。这可以通过在插入和删除节点时进行平衡操作来实现。一种常见的平衡算法是AVL,它可以维持的平衡性。另外,还有红黑等平衡二叉搜索的数据结构可供选择。通过使用这些平衡算法和数据结构,我们可以保证二叉搜索时间复杂度在O(log n)到O(n)之间。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [二叉排序(二叉搜索)的时间复杂度&空间复杂度](https://blog.csdn.net/xuxinrk/article/details/89553511)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [二叉查找的时间复杂度](https://blog.csdn.net/qq_25244495/article/details/83536591)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值